/**
 * Generali Solutions d'assurances - Tous droits reserves &copy; 2007 - 2010
 */
package fr.generali.accueilclient.editique.courrier.services.impl;

import javax.xml.ws.WebServiceException;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;

import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.accueilclient.commun.exception.AccueilClientTechnicalException;
import fr.generali.accueilclient.editique.courrier.services.IRestitutionCourrierBinaireService;
import fr.generali.editique.page.ws.binaire.dto.RepRestitutionCourrierbinaireDto;
import fr.generali.editique.page.ws.binaire.services.FaultDetail;
import fr.generali.editique.page.ws.binaire.services.IRestitutionCourrierWebService;
import fr.generali.editique.page.ws.binaire.services.InterruptedException;

@Service("restitutionCourrierBinaireService")
public class RestitutionCourrierBinaireServiceImpl implements IRestitutionCourrierBinaireService {

    private static final Logger LOGGER = LoggerFactory.getLogger(RestitutionCourrierBinaireServiceImpl.class);

    @Autowired
    @Qualifier("restitutionCourrierWebService")
    private IRestitutionCourrierWebService restitutionCourrierWebService;

    @Override
    public byte[] recupererBinaire(Long id) throws AccueilClientBusinessException {

        byte[] courrierBinaire = null;

        try {

            if (id != null) {

                RepRestitutionCourrierbinaireDto restitutionCourrierBinaire =
                                restitutionCourrierWebService.restitutionCourrierBinaire(id);
                if (restitutionCourrierBinaire != null) {
                    courrierBinaire = restitutionCourrierBinaire.getCourrierBinaire();
                }

            }

            return courrierBinaire;

        } catch (WebServiceException e) {
            LOGGER.debug(e.getMessage());
            throw new AccueilClientTechnicalException(e.getMessage());

        } catch (FaultDetail e) {
            LOGGER.debug(e.getMessage());
            throw new AccueilClientBusinessException(e.getMessage(), e);
        } catch (InterruptedException e) {
            LOGGER.debug(e.getMessage());
            throw new AccueilClientTechnicalException(e.getMessage());
        }

    }

}
